package map.pacman.facadeImp;

import java.util.Scanner;

import map.pacman.facade.EnviromentFacade;
import map.pacman.factory.Factory;
import map.pacman.model.Barreira;
import map.pacman.model.Caminho;
import map.pacman.model.Comida;
import map.pacman.model.Esteroide;
import map.pacman.model.Fantasma;
import map.pacman.model.Pacman;
import map.pacman.repositorio.ObjetoGenerico;

public class EnviromentFacadeImp implements EnviromentFacade {
	private int morto = 0;
	private int linhaPac = 3;
	private int colunaPac = 7;

	private Pacman pacman = Factory.criarPacman();
	private Comida comida = Factory.criarComida();
	private Esteroide esteroide = Factory.criarEsteroide();
	private int numeroDeLinhas = 10; 
	private int numeroDeColunas = 15;
	private ObjetoGenerico matriz[][] = new ObjetoGenerico[numeroDeLinhas][numeroDeColunas];

	public void povoarMapa() {
		for (int i = 0; i < numeroDeLinhas; i++) {
			for (int j = 0; j < numeroDeColunas; j++) {
					inserePocicoes(i, j);	
				}
				
				
				}
				insereModels();
	}


	public void mostrarMapa() {
		for (int i = 0; i < numeroDeLinhas; i++) {
			for (int j = 0; j < numeroDeColunas; j++) {
				if(matriz[i][j] != null) {
					System.out.print(matriz[i][j].objeto2D());					
				}
			}
			System.out.println();
		}
		System.out.println();
		System.out.println("Sua Pontuação atual: "+this.pacman.getPontuacao());
		System.out.println("Voce possui "+this.pacman.getNumeroDeVidas()+" vidas");
	}

	public void movimentar() {

		Scanner teclado = new Scanner(System.in);
		String movimento = teclado.next();

		if(movimento.equals("d")) {
			matriz[linhaPac][colunaPac] = Factory.criarCaminho();
			colunaPac++;
			
			if(matriz[linhaPac][colunaPac] instanceof Barreira) { //Verifica se é barreira
				colunaPac--;
				matriz[linhaPac][colunaPac] = Factory.criarPacman();
			} else if(matriz[linhaPac][colunaPac] instanceof Comida) { //Verifica se é comida
				comida = (Comida) matriz[linhaPac][colunaPac];
				pacman.setPontuacao(pacman.getPontuacao() + comida.getValor());
				matriz[linhaPac][colunaPac] = Factory.criarPacman();
			} else if(matriz[linhaPac][colunaPac] instanceof Caminho) { //Verifica se é caminho
				matriz[linhaPac][colunaPac] = Factory.criarPacman();
			} else if(matriz[linhaPac][colunaPac] instanceof Esteroide) {
				esteroide = (Esteroide) matriz[linhaPac][colunaPac];
				pacman.setPontuacao(pacman.getPontuacao() + esteroide.getValor());
				matriz[linhaPac][colunaPac] = Factory.criarPacman();
			} else if(matriz[linhaPac][colunaPac] instanceof Fantasma) {
				if(this.pacman.getNumeroDeVidas() == morto) {
					System.out.println("Voce perdeu!");
					System.exit(0);
				}
				colunaPac--;
				matriz[linhaPac][colunaPac] = Factory.criarCaminho();
				linhaPac = 3;
				colunaPac = 7;
				matriz[linhaPac][colunaPac] = Factory.criarPacman();
				this.pacman.setNumeroDeVidas(this.pacman.getNumeroDeVidas() - 1);
			}
		} else if(movimento.equals("a")) {
			matriz[linhaPac][colunaPac] = Factory.criarCaminho();
			colunaPac--;
			if(matriz[linhaPac][colunaPac] instanceof Barreira) {
				colunaPac++;
				matriz[linhaPac][colunaPac] = Factory.criarPacman();
			} else if(matriz[linhaPac][colunaPac] instanceof Comida) {
				comida = (Comida) matriz[linhaPac][colunaPac];
				pacman.setPontuacao(pacman.getPontuacao() + comida.getValor());
				matriz[linhaPac][colunaPac] = Factory.criarPacman();
			} else if(matriz[linhaPac][colunaPac] instanceof Caminho) {
				matriz[linhaPac][colunaPac] = Factory.criarPacman();
			} else if(matriz[linhaPac][colunaPac] instanceof Esteroide) {
				esteroide = (Esteroide) matriz[linhaPac][colunaPac];
				pacman.setPontuacao(pacman.getPontuacao() + esteroide.getValor());
				matriz[linhaPac][colunaPac] = Factory.criarPacman();
			} else if(matriz[linhaPac][colunaPac] instanceof Fantasma) {
				if(this.pacman.getNumeroDeVidas() == morto) {
					System.out.println("Voce perdeu!");
					System.exit(0);
				}
				colunaPac++;
				matriz[linhaPac][colunaPac] = Factory.criarCaminho();
				linhaPac = 3;
				colunaPac = 7;
				matriz[linhaPac][colunaPac] = Factory.criarPacman();
				this.pacman.setNumeroDeVidas(this.pacman.getNumeroDeVidas() - 1);
			}
		} else if (movimento.equals("w")) {
			matriz[linhaPac][colunaPac] = Factory.criarCaminho();
			linhaPac--;
			if(matriz[linhaPac][colunaPac] instanceof Barreira) {
				linhaPac++;
				matriz[linhaPac][colunaPac] = Factory.criarPacman();
			} else if(matriz[linhaPac][colunaPac] instanceof Comida) {
				comida = (Comida) matriz[linhaPac][colunaPac];
				pacman.setPontuacao(pacman.getPontuacao() + comida.getValor());
				matriz[linhaPac][colunaPac] = Factory.criarPacman();
			} else if(matriz[linhaPac][colunaPac] instanceof Caminho) {
				matriz[linhaPac][colunaPac] = Factory.criarPacman();
			} else if(matriz[linhaPac][colunaPac] instanceof Esteroide) {
				esteroide = (Esteroide) matriz[linhaPac][colunaPac];
				pacman.setPontuacao(pacman.getPontuacao() + esteroide.getValor());
				matriz[linhaPac][colunaPac] = Factory.criarPacman();
			} else if(matriz[linhaPac][colunaPac] instanceof Fantasma) {
				if(this.pacman.getNumeroDeVidas() == morto) {
					System.out.println("Voce perdeu!");
					System.exit(0);
				}
				linhaPac++;
				matriz[linhaPac][colunaPac] = Factory.criarCaminho();
				linhaPac = 3;
				colunaPac = 7;
				matriz[linhaPac][colunaPac] = Factory.criarPacman();
				this.pacman.setNumeroDeVidas(this.pacman.getNumeroDeVidas() - 1);
			}
		} else if(movimento.equals("s")) {
			matriz[linhaPac][colunaPac] = Factory.criarCaminho();
			linhaPac++;
			if(matriz[linhaPac][colunaPac] instanceof Barreira) {
				linhaPac--;
				matriz[linhaPac][colunaPac] = Factory.criarPacman();
			} else if(matriz[linhaPac][colunaPac] instanceof Comida) {
				comida = (Comida) matriz[linhaPac][colunaPac];
				pacman.setPontuacao(pacman.getPontuacao() + comida.getValor());
				matriz[linhaPac][colunaPac] = Factory.criarPacman();
			} else if(matriz[linhaPac][colunaPac] instanceof Caminho) {
				matriz[linhaPac][colunaPac] = Factory.criarPacman();
			} else if(matriz[linhaPac][colunaPac] instanceof Esteroide) {
				esteroide = (Esteroide) matriz[linhaPac][colunaPac];
				pacman.setPontuacao(pacman.getPontuacao() + esteroide.getValor());
				matriz[linhaPac][colunaPac] = Factory.criarPacman();
			} else if(matriz[linhaPac][colunaPac] instanceof Fantasma) {
				if(this.pacman.getNumeroDeVidas() == morto) {
					System.out.println("Voce perdeu!");
					System.exit(0);
				}
				linhaPac--;
				matriz[linhaPac][colunaPac] = Factory.criarCaminho();
				linhaPac = 3;
				colunaPac = 7;
				matriz[linhaPac][colunaPac] = Factory.criarPacman();
				this.pacman.setNumeroDeVidas(this.pacman.getNumeroDeVidas() - 1);
			}
		}
	}
	
	private void inserePocicoes(int i, int j) {
		if(j == 0 || i == 0 || j == numeroDeColunas-1 || i == numeroDeLinhas-1) {
			matriz[i][j] = Factory.criarBarreira();
		}
		else {
			matriz[i][j] = Factory.criarComida();
		}
		for(int l = 2; l<6; l++) {
			matriz[l][2] = Factory.criarBarreira();				
		}
			matriz[6][5] = Factory.criarBarreira();	
			matriz[6][8] = Factory.criarBarreira();	
			matriz[5][10] = Factory.criarBarreira();	
			matriz[5][12] = Factory.criarBarreira();	
			matriz[6][12] = Factory.criarBarreira();	
			matriz[4][9] = Factory.criarBarreira();
			matriz[3][5] = Factory.criarBarreira();	
			matriz[1][10] = Factory.criarBarreira();	
			matriz[2][10] = Factory.criarBarreira();	
			matriz[1][6] = Factory.criarBarreira();	
			matriz[2][7] = Factory.criarBarreira();	
			matriz[3][12] = Factory.criarBarreira();	
			matriz[7][5] = Factory.criarBarreira();	
			matriz[7][2] = Factory.criarBarreira();	
			matriz[8][4] = Factory.criarBarreira();	
			matriz[8][7] = Factory.criarBarreira();	
			matriz[7][9] = Factory.criarBarreira();	
			matriz[7][12] = Factory.criarBarreira();	
			matriz[4][7] = Factory.criarBarreira();
	}
	
	private void insereModels() {
		
		// cria esteroides
		
		matriz [1][1] = Factory.criarEsteroide();	
		matriz [1][13] = Factory.criarEsteroide();	
		matriz [8][1] = Factory.criarEsteroide();	
		matriz [8][13] = Factory.criarEsteroide();	
		
		//cria fantasmas
		
		matriz [5][4] = Factory.criarFantasma();	
		matriz [5][6] = Factory.criarFantasma();	
		matriz [5][8] = Factory.criarFantasma();	
		matriz [5][10] = Factory.criarFantasma();	
		
		//	Cria Pacman
		
		matriz[linhaPac][colunaPac] = Factory.criarPacman();
		
		// cria esteroides
							
		matriz [1][1] = Factory.criarEsteroide();	
		matriz [1][13] = Factory.criarEsteroide();	
		matriz [8][1] = Factory.criarEsteroide();	
		matriz [8][13] = Factory.criarEsteroide();	
		
		//cria fantasmas
		
		matriz [5][4] = Factory.criarFantasma();	
		matriz [5][6] = Factory.criarFantasma();	
		matriz [5][8] = Factory.criarFantasma();	
		matriz [5][10] = Factory.criarFantasma();	

		//	Cria Pacman
		
		
		//	Cria Pacman
		
		matriz[linhaPac][colunaPac] = Factory.criarPacman(); //criaçao do pacman.
		
		// cria esteroides
							
		matriz [1][1] = Factory.criarEsteroide();	
		matriz [1][13] = Factory.criarEsteroide();	
		matriz [8][1] = Factory.criarEsteroide();	
		matriz [8][13] = Factory.criarEsteroide();	
		
		//cria fantasmas
		
		matriz [5][4] = Factory.criarFantasma();	
		matriz [5][6] = Factory.criarFantasma();	
		matriz [5][8] = Factory.criarFantasma();	
		matriz [5][10] = Factory.criarFantasma();
	}
}
